scrapy问题解决
**
scrapy无输出问题解决
**
昨天跟着老师敲的时候,发现自己的scrapy无输出,心想:老师运行是对的,为什么我运行就是错的,于是在网络上疯狂寻找答案,最终还是没能解决,一觉之后,突然想到以前使用xpath时的错误。突然就想着试一下。果然,解决了问题。
使用requests时的类似错误
import requests
from lxml import etree
headers={
'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36 Edg/91.0.864.71"
}
url='https://map.baidu.com/'
response=requests.get(url=url,headers=headers).text
tree=etree.HTML(response)
page_text=tree.xpath('//*[@id="selCityPlaceListId"]/table/tbody/tr[1]/td[3]/text()')
print(page_text)
输出:[]
可以看出,这个是无输出的。
问题联想
由于使用scrapy和requests都出现了这样的错误,那么会不会是xpath的错误。于是我修改了一下代码,一步一步的检测,最终,问题出现在xpath表达式上面。
初始代码:
import scrapy
class QiubiaSpider(scrapy.Spider):
name = 'qiubai'
allowed_domains = ["https://www.qiushibaike.com/text/"]
start_urls = ["https://www.qiushibaike.com/text/"]
def parse(self, response):
#文件数据解析。
response.selector.register_namespace('div', 'https://www.qiushibaike.com/text/')
div_list=response.xpath('//*[@id="content-left"]/div')
for div in div_list:
#extract可以将Selector中的data对象提取出来
name=div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
#如果列表调用了extract,那么就会把里面所有的selector的data参数所对应的字符串取出来
content=div.xpath('./a[1]/div/span//text()').extract()
print(name,content)
break
初始代码的输出:
可以看到没有任何输出。
既然想到了问题出在xpath上,于是,我开始不断的print测试xpath代码块。
import scrapy
class QiubiaSpider(scrapy.Spider):
name = 'qiubai'
allowed_domains = ["https://www.qiushibaike.com/text/"]
start_urls = ["https://www.qiushibaike.com/text/"]
def parse(self, response):
#文件数据解析。
response.selector.register_namespace('div', 'https://www.qiushibaike.com/text/')
div_list=response.xpath('//*[@id="content-left"]')
print(div_list)
#for div in div_list:
#extract可以将Selector中的data对象提取出来
#name=div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
#如果列表调用了extract,那么就会把里面所有的selector的data参数所对应的字符串取出来
#content=div.xpath('./a[1]/div/span//text()').extract()
#print(name,content)
输出果然是一个空列表:
测试是不是网站原因导致xpath表达式提取不到:
import scrapy
class QiubiaSpider(scrapy.Spider):
name = 'qiubai'
allowed_domains = ["https://www.qiushibaike.com/text/"]
start_urls = ["https://www.qiushibaike.com/text/"]
def parse(self, response):
#文件数据解析。
response.selector.register_namespace('div', 'https://www.qiushibaike.com/text/')
div_list=response.xpath('/dvi')
print(div_list)
#for div in div_list:
#extract可以将Selector中的data对象提取出来
#name=div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
#如果列表调用了extract,那么就会把里面所有的selector的data参数所对应的字符串取出来
#content=div.xpath('./a[1]/div/span//text()').extract()
#print(name,content)
果然不是网站原因:
那么,修改xpath表达式,解决问题:
import scrapy
class QiubiaSpider(scrapy.Spider):
name = 'qiubai'
allowed_domains = ["https://www.qiushibaike.com/text/"]
start_urls = ["https://www.qiushibaike.com/text/"]
def parse(self, response):
#文件数据解析。
response.selector.register_namespace('div', 'https://www.qiushibaike.com/text/')
div_list=response.xpath('/html/body/div[1]/div/div[2]/div[2]/a[1]/div/span/text()').extract()
print(div_list)
#for div in div_list:
#extract可以将Selector中的data对象提取出来
#name=div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
#如果列表调用了extract,那么就会把里面所有的selector的data参数所对应的字符串取出来
#content=div.xpath('./a[1]/div/span//text()').extract()
#print(name,content)
这里是蜘蛛云,我是南风,欢迎评论斧正。