首先,我们需要安装一些必要的库,包括requests、BeautifulSoup、Scrapy、MySQL Connector等。在终端或命令行中输入以下命令即可安装:
pip install requests beautifulsoup4 scrapy mysql-connector-python
接下来,我们创建一个名为myspider的Scrapy项目,并在该项目中创建一个名为myspider的Spider类
import scrapy
import requests
from bs4 import BeautifulSoup
from myspider.items import MyItem
from scrapy.http import Request
from scrapy.exceptions import CloseSpider
import mysql.connector
class Myspider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.com/']
item_count = 0
conn = None
cursor = None
def __init__(self, *args, **kwargs):
super(Myspider, self).__init__(*args, **kwargs)
self.items = MyItem()
self.conn = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name')
self.cursor = self.conn.cursor()
def parse(self, response):
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 找到需要抓取的网页数据,这里以抓取每个文章的标题和链接为例
articles = soup.find_all('div', class_='article')
for article in articles:
title = article.find('h2').text.strip()
link = article.find('a')['href']
# 数据清洗和解析,这里以去除标题中的换行符和链接中的查询参数为例
title = title.replace('\n', '')
link = link.split('?')[0]
# 将抓取的数据保存到数据库中
sql = "INSERT INTO mytable (title, link) VALUES (%s, %s)"
values = (title, link)
self.cursor.execute(sql, values)
self.conn.commit()
self.item_count += 1
if self.item_count >= 100: # 抓取100条数据后关闭爬虫,这里可以根据实际需求进行调整
raise CloseSpider('Close spider after 100 items scraped')
next_page = soup.find('link', rel='next')['href']
if next_page:
yield Request(urljoin(response.url, next_page), self.parse)
我们首先定义了一个名为Myspider的Spider类,并在其中定义了一个名为parse的函数。该函数用于抓取网页数据、进行数据清洗和解析、并将结果保存到数据库中。在函数中,我们首先使用BeautifulSoup库找到需要抓取的网页数据,并对数据进行清洗和解析。然后,我们使用MySQL Connector库将数据保存到数据库中。最后,如果已经抓取了足够的数据,我们就关闭爬虫。此外,我们还可以通过定义其他函数来定制爬虫的行为。