当前位置 主页 > 服务器问题 > Linux/apache问题 >
xpath选择器
/表示从当前位置的下一级目录进行寻找,//表示从当前位置的任意一级子目录进行寻找,
默认从根目录开始查找,. 代表从当前目录开始查找,@后跟标签属性,text()函数代表取出文字内容
//div[@id='wrapper']//li 代表先从根目录开始查找id为wrapper的div标签,然后取出其下的所有li标签
.//div[@class='pic']/em[1]/text() 代表从当前选择器目录开始查找所有class为pic的div之下的第一个em标签,取出文字内容
string(//div[@id='endText']/p[position()>1]) 代表选取id为endText的div下第二个p标签之后的所有文字内容
/bookstore/book[last()-2] 选取属于 bookstore 子元素的倒数第3个 book 元素。
CSS选择器
还可以使用css选择器来选择页面内的元素,其通过CSS伪类的方式表达选择的元素,使用如下
# 选择类名为left的div下的p标签中的文字 response.css('div.left p::text').extract_first() # 选取id为tag的元素下类名为star元素中的文字 response.css('#tag .star::text').extract_first()
在运行爬虫文件时通过参数-o指定文件保存的位置即可,可以根据文件后缀名选择保存为json或者csv文件,例如
scrapy crawl movie -o data.csv
还可以piplines.py文件中对取得的Item数据作进一步操作从而通过python操作将其保存到数据库中
有时为了应对网站的反爬虫机制,需要对下载中间件进行一些伪装设置,包括使用IP代理和代理user-agent方式,在middlewares.py文件中新建一个user_agent类用于为请求头添加用户列表,从网上查一些常用的用户代理放入USER_AGENT_LIST列表,然后通过random函数从中随机抽取一个作为代理,设置为reques请求头的User_Agent字段
class user_agent(object): def process_request(self, request, spider): # user agent 列表 USER_AGENT_LIST = [ 'MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23', 'Opera/9.20 (Macintosh; Intel Mac OS X; U; en)', 'Opera/9.0 (Macintosh; PPC Mac OS X; U; en)', 'iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)', 'Mozilla/4.76 [en_jp] (X11; U; SunOS 5.8 sun4u)', 'iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0', 'Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)', 'Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)' ] agent = random.choice(USER_AGENT_LIST) # 从上面列表中随机抽取一个代理 request.headers['User_Agent'] = agent # 设置请求头的用户代理
在settings.py文件内设置开启下载中间件即取消如下几行的注释,注册代理类user_agent并设置优先级,数字越小优先级越高
更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》