本文实例讲述了Python爬虫框架Scrapy基本用法。分享给大家供大家参考,具体如下:
Xpath
1
2
3
4
5
6
7
8
9
10
|
< html > < head > < title >标题</ title > </ head > < body > < h2 >二级标题</ h2 > < p >爬虫1</ p > < p >爬虫2</ p > </ body > </ html > |
在上述html代码中,我要获取h2的内容,我们可以使用以下代码进行获取:
1
|
info = response.xpath( "/html/body/h2/text()" ) |
可以看出/html/body/h2为内容的层次结构,text()
则是获取h2标签的内容。//p
获取所有p标签。获取带具体属性的标签://标签[@属性="属性值"]
1
|
< div class = "hide" ></ div > |
获取class为hide的div标签
1
|
div[@ class = "hide" ] |
再比如,我们在谷歌Chrome浏览器上的Console界面使用$x['//h2']
命令获取页面中的h2元素信息:
xmlfeed模板
创建一个xmlfeed模板的爬虫
1
|
scrapy genspider -t xmlfeed abc iqianyue.com |
核心代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from scrapy.spiders import XMLFeedSpider class AbcSpider(XMLFeedSpider): name = 'abc' start_urls = [ 'http://yum.iqianyue.com/weisuenbook/pyspd/part12/test.xml' ] iterator = 'iternodes' # 迭代器,默认为iternodes,是一个基于正则表达式的高性能迭代器。除了iternodes,还有“html”和“xml” itertag = 'person' # 设置从哪个节点(标签)开始迭代 # parse_node会在节点与提供的标签名相符时自动调用 def parse_node( self , response, selector): i = {} xpath = "/person/email/text()" info = selector.xpath(xpath).extract() print (info) return i |
csvfeed模板
创建一个csvfeed模板的爬虫
1
|
scrapy genspider -t csvfeed csvspider iqianyue.com |
核心代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
from scrapy.spiders import CSVFeedSpider class CsvspiderSpider(CSVFeedSpider): name = 'csvspider' allowed_domains = [ 'iqianyue.com' ] start_urls = [ 'http://yum.iqianyue.com/weisuenbook/pyspd/part12/mydata.csv' ] # headers 主要存放csv文件中包含的用于提取字段的信息列表 headers = [ 'name' , 'sex' , 'addr' , 'email' ] # delimiter 字段之间的间隔 delimiter = ',' def parse_row( self , response, row): i = {} name = row[ "name" ] sex = row[ "sex" ] addr = row[ "addr" ] email = row[ "email" ] print (name,sex,addr,email) #i['url'] = row['url'] #i['name'] = row['name'] #i['description'] = row['description'] return i |
crawlfeed模板
创建一个crawlfeed模板的爬虫
1
|
scrapy genspider -t crawlfeed crawlspider sohu.com |
核心代码
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class CrawlspiderSpider(CrawlSpider): name = 'crawlspider' allowed_domains = [ 'sohu.com' ] start_urls = [ 'http://sohu.com/' ] rules = ( Rule(LinkExtractor(allow = r 'Items/' ), callback = 'parse_item' , follow = True ), ) def parse_item( self , response): i = {} #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract() #i['name'] = response.xpath('//div[@id="name"]').extract() #i['description'] = response.xpath('//div[@id="description"]').extract() return i |
上面代码rules部分中的LinkExtractor为连接提取器。
LinkExtractor中对应的参数及含义
参数名 | 参数含义 |
---|---|
allow | 提取符合正则表达式的链接 |
deny | 不提取符合正则表达式的链接 |
restrict_xpaths | 使用XPath表达式与allow共同作用提取同时符合对应XPath表达式和对应正则表达式的链接 |
allow_domains | 允许提取的域名,比如我们想只提取某个域名下的链接时会用到 |
deny_domains | 进制提取的域名 |
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/y472360651/article/details/75194626