# _*_coding=utf-8 _*_ from fake_useragent import UserAgent import requests from lxml import etree from time import sleep def get_html(url): """ :param url: 要爬取的url :return返回html """ headers = { "User-Agent": UserAgent().chrome } resp = requests.get(url, headers=headers) sleep(3) if resp.status_code == 200: resp.encoding = 'utf-8' return resp.text else: return None def parse_list(html): """ :param html: 传递进来一个有电影列表的html :return 返回一个电影列表的url """ e = etree.HTML(html) list_url = ['https://maoyan.com'+ url for url in e.xpath('//div[@class="movie-item-hover"]/a/@href')] return list_url def parse_index(html): """ :param html: 传递进来一个有电影信息的url :return 已经提取好的电影信息 """ e = etree.HTML(html) names = e.xpath('//h1/text()')[0] type = e.xpath('//li[@class="ellipsis"]/a/text()')[0] actor = e.xpath('//ul[@class="celebrity-list clearfix"]/li[@class="celebrity actor"]/div/a/text()') actors = format_actor(actor) return {'name': names, 'type': type, 'actor': actors} def format_actor(actors): actor_set = set() # 去重 for actor in actors: actor_set.add(actor.strip()) return actor_set def main(): num = int(input('请输入要获取多少页数据')) for y in range(num): url = 'https://maoyan.com/films?showType=3&offset={}'.format(y*30) # print(url) list_html = get_html(url) list_url = parse_list(list_html) for url in list_url: # print(url) info_html = get_html(url) movie = parse_index(info_html) print(movie) if __name__ == '__main__': main()
老师为啥没有数据啊!
File "D:/pycharmfile/爬虫/第一个爬虫.py", line 9, in <module>
print(info.decode('utf-8'))
UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 22462: illegal multibyte sequence
按照格式源代码写的啊 就是开头写了#coding 为什么这样 怎么解决
页面里面找不到js代码了
请问下载ChromeDriver软件在哪里下载的
老师,没有,这个里面只有人人项目,node-v14.17.4-, image文件里只有图片
解决了老师,他没有这个contrip包。。。,因为这个包在from scrapy.pipelines.images import ImagesPipeline这样子
所以setting中把视频的'scrapy.contrib.pipeline.images.ImagesPipeline':300
改成
'scrapy.pipelines.images.ImagesPipeline': 300,
就可以正常运行了。
<size=18>请求失败<size>
为啥运行的不一样
异步请求是什么意思啊 能讲详细一点吗
有一个小问题 如果爬取过程中遇到这样的 就是一段话没说完 需要再深一层的 点进去之后有分页的 应该怎么爬取
老师讲义能发一分么
SyntaxWarning: "is" with a literal. Did you mean "=="? if e.args is ():
这个警告能去掉吗?挺烦人的,百度没找到合适的方法
老师麻烦帮我看下代码,我的ip好像是不是被封了?响应回来的html好像是要我验证
import requests from fake_useragent import UserAgent from lxml import etree def get_html(url): '''传入要爬取的地址,返回html''' headers = {"User-Agent": UserAgent().chrome} response = requests.get(url,headers) if response.status_code == 200: response.encoding = 'utf-8' print(response.text) return response.text else: return None def parse_list(html): '''传入含有电影信息的html,返回电影列表的每个电影的html''' e = etree.HTML(html) list_url = ['https://maoyan.com/{}'.format(url) for url in e.xpath('//div[@class="movie-item film-channel"]/a/@href')] # print(list_url) return list_url def parse_index(html): '''传入有电影信息的html,返回提取到的电影信息''' e = etree.HTML(html) name = e.xpath('//h1[@class="name"]/text()') type = e.xpath('//li[@class="ellipsis"][1]/a/text()') actor = e.xpath('//div[@class="celebrity-group"][2]/ul[@class="celebrity-list clearfix"]/li/div/a/text()') actors = format_data(actor) return {'name':name,'type':type,'actor':actors} def format_data(actors): actor_set = set() for actor in actors: actor_set.add(actor) return actor_set def main(): num = int(input('请输入要获取的页数:')) for page in range(num): url = 'https://maoyan.com/films?showType=3&offset={}'.format(page*30) list_html = get_html(url) list_url = parse_list(list_html) print(list_url) # for url in list_url: # info_html = get_html(url) # movie = parse_index(info_html) # print(movie) if __name__ == "__main__": main()
怎么没有爬取微信公众号和APP数据的视频,能简单介绍下这些是怎么爬取的吗?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637