安装scrapy框架
在window终端执行 pip install scrapy
报错:
building 'twisted.test.raiser' extension
优酷账号改名字怎么改,error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":
解决方法:
然后再运行pip install scrapy
创建scrapy新项目
将CMD切换到E:/scrapyProject文件夹下,执行下面命令,创建名为youkuMoive的项目:
1,首先登录上优酷账户。2,登陆后,点击右侧导航栏中自己的头像,在弹出的页面中选择右上方的“设置”。3,进入设置选项后,在左侧导航栏中点击“基本设置——基本资料”。4,看到昵称后面有个修改按钮,点击“修改”即可。
scrapy startProject youkuMoive
然而,竟然报错、、
from lxml import etree
importError : cannot import name etree
1、在浏览器中输入优酷网,找到官方网站。2、点击右上角,需要登录。3、输入账号和密码。4、登录成功后,点击右上角的头像,选择创作中心。5、进去之后在视频管理里面,就可以看到之前发布的视频。6、点击视频右侧的编辑。7。
百度了下,可能是lxml版本的原因
所以,首先卸载原来的lxmlpip uninstall lxml
然后再安装pip install lxml,它会自动安装对应的版本的lxml
然后再次执行创建youkuMoive的命令,便可创建成功了!
目录结构如:
scrapy将爬虫分成了4个模块:
spiders:爬虫模块。负责配置需要爬取的数据和爬取规则,以及解析结构化数据
items:定义我们需要的结构化数据,使用相当于dict
pipelines:管道模块,处理spider模块分析好的结构化数据,如保存入库等
middlewares:中间件,相当于钩子,可以对爬取前后做预处理,如修改请求header,url过滤等
Scrapy案例(爬取优酷网站电影名字)
在CMD中创建爬虫
scrapy genspider youkuMoiveSpider list.youku.com
此时在spider文件夹下会出现youkuMoiveSpider.py的文件。
下面来逐个编写各类文件。
Items 类(items.py)
Spider 类(youkuMoiveSpider.py)
Pipelines类(pipelines.py)
修改优酷的用户名具体步骤如下:1、把鼠标放在账号头像处,会出现以下内容。点击“设置”;2、会出现“基本设置”等内容。点击修改昵称;3、更改好了之后,刷新页面,就可以查看新的用户名了;4、用户名更改完成。
Setting(setting.py)
执行爬虫脚本:
scrapy crawl youkuMoiveSpider
报错1:
import win32api
ModuleNotFoundError:No module named 'win32api'
解决:安装win32apipip install pypiwin32
报错2:刚开始在pipelines中的写入文件时用的是fp.write(item['moiveName'][0].encode('utf8')+'\n\n'),从而报出 TypeError: can't concat bytes to str ,网上查找原因,得知原来encode返回的原来是bytes类型,然后便改成了fp.write(str(item['moiveName'][0].encode('utf8'))+"\n\n"),不抱错了,但是爬取出的文件是类似b'\xe5\xa4\xa7\xe4\xbe\xa0'的乱码,然后将encode('utf8')去掉就好了。
把所有bug修复完毕,再次执行脚本,便可得到存储有电影名字的txt文件啦
另附选择器测试方法:
在CMD中执行scrapy shell !3~A
便会在终端返回爬取的网页,response的返回代码为200时表示成功
css选择器
css选择response.css(" ")
css选取属性sub.css('a::attr(title)').extract()
登陆名字是不可以改变的,但是昵称是可以改变的。1 优酷客户端,点击左上角的你的名字,2 进入网页,鼠标放在你的名字上,就会出现一个笔的模样,就是叫你编辑 3 点击那个笔,就可以进入设置页面 4 基本资料里面,名字哪。
xpath选择器
xpath选择response.xpath(" ")
xpath选取文本sub.xpath("./h3//text()").extract()
xpath选取属性sub.xpath("./ul/li[1]/img/@src").extract()