所以,我有一个爬虫需要从头部的meta标签和正文中的一些元素标签中提取一些数据。
当我尝试这个时
对于response.xpath(“// html”)中的课程:
和这个
对于response.xpath(“// head”)中的课程:
它仅从<head>... </head>
标记中的元标记中提取数据。
当我尝试这个时
对于response.xpath(“// body”)中的课程:
它只从html <body>... </body>
标记中的标记中获取数据。
如何组合这两个选择器,我也试过
对于response.xpath(“// head | // body”)中的课程:
但它只返回<head>... </head>
的'meta'标签,没有从身体中提取任何内容。
我也试过这个
对于response.xpath(“// *”)中的课程:
它有效,但这是非常低效的,需要花费大量时间来提取。我相信有更有效的方法可以做到这一点。
这是Scrapy代码,如果它有帮助......
yeild 下的前2个元素(pagetype,pagefeatured)位于<head> ... <head>
标记中。最后2个元素(coursetloc,coursetfees)位于<body ... </body>
标记
是的,它可能看起来很奇怪,但我在抓取网站的<body>...</body>
内有'meta'标签。
class MySpider(BaseSpider):
name = "dkcourses"
start_urls = ['http://www.example.com/scrapy/all-courses-listing']
allowed_domains = ["example.com"]
def parse(self, response):
hxs = Selector(response)
for courses in response.xpath("//body"):
yield {
'pagetype': ''.join(courses.xpath('.//meta[@name="dkpagetype"]/@content').extract()),
'pagefeatured': ''.join(courses.xpath('.//meta[@name="dkpagefeatured"]/@content').extract()),
'coursetloc': ''.join(courses.xpath('.//meta[@name="dkcoursetloc"]/@content').extract()),
'coursetfees': ''.join(courses.xpath('.//meta[@name="dkcoursetfees"]/@content').extract()),
}
for url in hxs.xpath('//ul[@class="scrapy"]/li/a/@href').extract()):
yield Request(response.urljoin(url), callback=self.parse)
非常感谢任何帮助。感谢
答案 0 :(得分:1)
extract_first()
获取extract()
中的第一个值,不要使用join()
[starts-with(@name, "dkn")]
查找meta
标记,//meta
表示文档的所有内容。In [5]: for meta in response.xpath('//meta[starts-with(@name, "dkn")]'):
...: name = meta.xpath('@name').extract_first()
...: content = meta.xpath('@content').extract_first()
...: print({name:content})
出:
{'dknpagetype': 'Course'}
{'dknpagefeatured': ''}
{'dknpagedate': '2016-01-01'}
{'dknpagebanner': 'http://www.deakin.edu.au/__data/assets/image/0006/757986/Banner_Cyber-Alt2.jpg'}
{'dknpagethumbsquare': 'http://www.deakin.edu.au/__data/assets/image/0009/757989/SQ_Cyber1-2.jpg'}
{'dknpagethumblandscape': 'http://www.deakin.edu.au/__data/assets/image/0007/757987/LS_Cyber1-1.jpg'}
{'dknpagethumbportrait': 'http://www.deakin.edu.au/__data/assets/image/0008/757988/PT_Cyber1-3.jpg'}
{'dknpagetitle': 'Graduate Diploma of Cyber Security'}
{'dknpageurl': 'http://www.deakin.edu.au/course/graduate-diploma-cyber-security'}
{'dknpagedescription': "Take your understanding of cyber security to the next level with Deakin's Graduate Diploma of Cyber Security and build your capacity to investigate and combat cyber-crime."}
{'dknpageid': '723503'}