
网络爬虫只能根据你指定的url爬取网页的html代码,至于你想要包含指定内容的网页的话,只能先爬取下来网页,然后在对页面内容进行匹配(正则,也有开源工具)找到你想要的内容就可以了!顺便说一句网络爬虫不能根据关键字来爬取网页!
Selector选择器
在Scrapy中,也可以使用BeautifulSoup来解析网页,但是,我们推荐使用Scrapy自带的Selector选择器来解析网页,没别的原因,效率高。Selector选择器有XPath方法和css方法两种选择方法,我使用的是XPath方法。
XPath
XPath 是一门在 XML 文档中查找信息的语言。因为网上的教程有很多,在此处推荐两个,我自己就不多讲了。一个菜鸟教程的XPath文字教程,一个是极客学院的XPath视频教程,后者需要实名认证一下就可以观看,也不麻烦,个人比较推崇后者,老师讲的很易懂。相信我,根据教程只需要半个小时你就能明白XPath,再根据下面我的代码对照巩固一下,你就能掌握它了。
使用Chrome分析网页
我们使用Chrome浏览器(firefox也是类似的)来分析网页,分析我们的XPath该怎么去写,比如说我们现在要分析帖子的标题
右键帖子标题,选择检查
检查
此时,Chrome的调试工具会跳出来,并且自动定位到源代码中我们要检查的元素的位置
检查2
之后根据代码结构我们很轻松的就得出其XPath
//[@id="thread_subject"]/text()
1
其实在某些时候也可以直接右键元素,选择copy xpath,但是这种方法在实践中用处基本为零,因为很难去找出多个网页的共同特质,所以一般情况下我们还是要自己去分析。
自动生成
在这里有必要提醒一个神坑,在下面代码中也有体现,详见我从前写的这篇文章Scrapy匹配xpath时tbody标签的问题
这个坑给我的启示是,当发现了感觉不能用科学解释的错误的时候,就检查一下获取到的源代码吧!
代码
不说废话了,直接上代码。
首先,修改itemspy文件,定义好我们要提取的内容
# -- coding: utf-8 --
import scrapy
class HeartsongItem(scrapyItem):
title = scrapyField() # 帖子的标题
url = scrapyField() # 帖子的网页链接
author = scrapyField() # 帖子的作者
post_time = scrapyField() # 发表时间
content = scrapyField() # 帖子的内容
然后来到heartsong_spiderpy,编写爬虫
# -- coding: utf-8 --
# import scrapy # 可以写这句注释下面两句,不过下面要更好
from scrapyspiders import Spider
from scrapyselector import Selector
from heartsongitems import HeartsongItem # 此处如果报错是pyCharm的原因
class HeartsongSpider(Spider):
name = "heartsong"
allowed_domains = ["heartsongtop"] # 允许爬取的域名,非此域名的网页不会爬取
start_urls = [
">
如果你是在浏览器 开发工具 提取的xpath,很多情况下是不能用到scrapy中的,
因为浏览器看到的dom树可能是js脚本动态修改过的(这种情况非常常见),你需要直接查看html源码,分析。
以上就是关于xpath爬取不了输入关键字后的网页全部的内容,包括:xpath爬取不了输入关键字后的网页、尝试用scrapy提取网页中的网址、使用scrapy做爬虫,xpath选择器为什么无法定位到网页的某些节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)