python3爬虫踩坑记录篇(一)

最近在写代码的时候经常报错,能力有限,再此只提供解决办法,如有错误请及时纠正

1:scrapy做post提交data键值都是字符串,如有汉字或数值类型先转字符串

yield scrapy.FormRequest(url=start_url,headers=headers,method = 'POST',formdata=data,callback=self.parse,dont_filter=True

同时dont_filtter,要慎重考虑是否开启,因为他是true为scrapy不过滤URL

2:xpath不能使用想获取所有文本这种索引写法。解决方案:

data = selector.xpath('//div[@id="test3"]')
info = data.xpath('string(.)').extract()[0]

当然提取文本只是一种方法,再有文章将会详细写下scrapy的selector选择器
这里还有个xpath选择层级想说说

(//node)[1]#选择当前所有节点中的第一个 xp("(//ul/li)[1]")
//node[1]从父节点向上截取该节点中出现的第一个(可以匹配出多个父节点下的第一个为node的节点)xp("//ul/li[1]")

3extract()出来是一个列表extract_first(“”)出来是字符串默认值
列表加到字符串中”“.join(),,当然你想切割原字符串加点佐料也是可以的:

"_".join(str.split(""))#split切割之后是一个列表,可以将"_"作为str每个元素的间隔,当然replace()和正则的sub()亦可实现

4:有些文章在提取字段是会有间隔符和一些特殊字符在写入数据库是报错需提前替换

replace(' ','')
.extract_first("").replace(u'\u3000',u'')##\u3000(\u3000 是全角的空白符)
##含有 \xa0 (\xa0 是不间断空白符  )也是类似的方法

当然还有笑脸符号也是会报错的,请自行百度脑补

5#使用此包有时会报错可修改:fake_useragent.UserAgent(use_cache_server=False)#window要加linux去掉

6:代码优化的好思路,一般提取不同字段都是分开,但是此处是个好思路

links = response.xpath('//a[contains(@href, "image")]').extract() 
    for index, link in enumerate(links):  ###枚举的是带有索引的所以后面再提取就会方便
         args =(index,link.xpath('@href').extract(),link.xpath('img/@src').extract())`

7那么在我们程序当中有时在减少代码冗余,会将相同的代码段给个状态码来触发,如果状态码没有回归原始位,会使你的状态一直停留在最后一个状态,ps:就像循环中不break一样

state=1         ####这种状况下很容易在运行一次满足条件state永久变为3
for i in 。。。:
    if ..:
    elif..:
        state=3
    else..:
        state=3
    if state==3:

那么此时一定要在if state==3:后面的代码段中写入state=1.。。当然你可能有其他需求

好了最近比忙平时也忘记了记录踩过的坑有时间再写吧

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值