1)爬取博客中一个用户的所有博文信息
2)将博文的文章名、文章URL、文章点击数、文章评论数等信息提取出来
3)将提取出来的文章名、文章URL、文章点击数、文章评论数等信息写入MySql数据库中存储
1) 创建存储数据的数据库及其表
1.通过mysql创建数据库及其表。
借助pymysql模块中的connect函数连接数据库和query函数执行SQL语句进行建数据库和表
2.在mysql窗口创建
表结构:
CREATE TABLE myhexun(
id INT(10) AUTO_INCREMENT PRIMARY KEY NOT NULL,
name VARCHAR(30),
url VARCHAR(100),
hits INT(15),
comment INT(15));
2)创建爬虫项目
在CMD命令行中执行:
scarpy startproject hexunpjt
3)修改items文件
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class HexunpjtItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
name = scrapy.Field()
url = scrapy.Field()
hits = scrapy.Field()
comment = scrapy.Field()
4)修改pipelines文件
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
class HexunpjtPipeline(object):
def __init__(self):
self.conn = pymysql.connect(host = "127.0.0.1",user = "root",passwd = "root",db = "hexun")
def process_item(self, item, spider):
#每一个博文列表页中包含多篇博文的信息,我们可以通过for循环一次处理各博文的信息
for i in range(0,len(item["name"])):
name = item["name"][i]
url = item["url"][i]
hits = item["hits"][i]
comment = item["comment"][i]
sql = "INSERT INTO myhexun(name,url,hits,comment) VALUES('"+ name + "','" + url +"', '" + hits + "','" + comment + "')"
self.conn.query(sql) #插入
self.conn.commit() #提交
return item
def close_spider(self):
self.conn.close()
5)修改settings文件
开启ITEM_PIPELINES
ITEM_PIPELINES = {
'hexunpjt.pipelines.HexunpjtPipeline': 300,
}
6)创建基于basic爬虫
在CMD命令行中执行:scrapy genspider -t basic myhexunspd hexun.com
7)分析网页中要爬取的数据,写出对应的正则表达式或XPATH表达式
8)修改myhexunspd文件
# -*- coding: utf-8 -*-
import scrapy
import re
import urllib.request
from hexunpjt.items import HexunpjtItem
from scrapy.http import Request
class MyhexunspdSpider(scrapy.Spider):
name = 'myhexunspd'
allowed_domains = ['hexun.com']
#设置要爬取的用户的uid,为后续构造爬取网址做准备
uid = "fjrs168"
start_urls = ['http://hexun.com/']
def start_requests(self):
yield Request("http://" + str(self.uid) + ".blog.hexun.com/p1/default.html",
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3964.2 Safari/537.36"})
def parse(self, response):
item = HexunpjtItem()
item["name"] = response.xpath("//span[@class='ArticleTitleText']/a/text()").extract()
item["url"] = response.xpath("//span[@class='ArticleTitleText']/a/@href").extract()
#使用urllib和re模块获取博文的评论数和阅读数
#首先提取存储评论数和点击数网址的正则表达式
part1 = '