使用脚本启动 scrapy 爬虫
from scrapy.cmdline import execute
import sys
import os
print(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy","crawl","douban"])
# setting --> ROBOTSTXT_OBEY = False
爬虫分析HTML源码时
在使用 Chrome 浏览器复制的 xpath 时,网页可能会加载其他标签。导致浏览器获取的 xpath 是无效的。
对于 p 标签的 text 是无法获取到全部 text 的,因为他无法识别节点。
scrapy 获取HTML数据
xpath 方法使用之一:
包含,class 中 包含 vote-post-up 这个 class 的标签
response.xpath('//soan[contains('@class','vote-post-up')]')
css 方法使用之一:
同上:过个 class 中,选取 vote-post-up 底下的 h10 标签的文本
response.css('.vote-post-up h10::text')
resposne.css('a[href='#article'] span::text')
获取属性值:
response.css('a::attr(href)')
两个 class 同时获取
response.css('.a.b')
extract_first("") # 若返回值为空,则返回默认值 ""
scrapy 传值给回调函数
meta={"key":"val"}
response.meta.get('key','')
判断是否为 unicode
if isinstance("",str):
print("unicode")
pipeline 注意点
在处理完 item 的时候,一定要 return 回去
调用 scrapy 官方的 imgpipeline
class ImgPipeline2(ImagesPipeline):# 他处理完毕之后,会传递给下一个 pipeline
def item_completed(self, results, item, info):
for ok,value in results:
img_file_path = value["path"]
item['img_file_path'] = img_file_path
return item
存储 cookie
import http.cookiejar as cookielib
import requests
session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename='cookie.txt')
# session.get('http://www.baidu.com')
# session.cookies.save()
# 是否允许重定向
session.get('url', allow_redirects=False)
# 加载 cookie
session.cookies.load(ignore_discard=True)
print(session.cookies)
正则匹配,匹配多行
re.math("","pattarm",re.DOTALL)