今天介绍一下基于asyncio和aiohttp的异步爬虫的编写,解析html用的是xpath。
该爬虫实现了以下功能:
1.读取csv文件中的爬取规则,根据规则爬取数据;代码中添加了对3个网站的不同提取规则,如有需要,还可以继续添加;
2.将爬取到的数据保存到mysql数据库中。
通过输入问题,该爬虫能爬取关于健康方面的数据。
具体代码如下:
# coding:utf-8
"""
async-apiser xpath
"""
from lxml import etree
import csv
import re
import os
import asyncio
import aiohttp
import aiomysql
from datetime import datetime
from config import Config
class HealthSpider(object):
def __init__(self, user_id, keyword, url, hrule, drule, count, trule):
self.user_id = user_id
self.keyword = keyword
self.url = url
self.hrule = hrule
self.drule = drule
self.count = count
self.trule = trule
self.headers = ''
self.urls_done = []
self.urls_will = []
self.spider_data = {}
@staticmethod
def handle_flag(str):
"""
去除字符串中的style样式标签
:param html:
:return:
"""
pattern = re.compile(r' style=".*?;"', re.S)
return pattern.sub('', str)
async def get_html(self, url, session):
"""
根据url,返回html
:param url:
:return:
"""
try:
async with session.get(url, headers=self.headers, timeout=5) as resp:
if resp.status in [200, 201]:
data = await resp.text()
return