19Python爬虫–爬取新浪新闻标题并保存到数据库


一、爬取新浪新闻思路

1、创建scrapy项目
2、分析新浪新闻网站静态页面代码
3、编写对应的xpath公式
4、写代码

二、项目代码

步骤1、创建scrapy项目

创建爬虫文件

scrapy startproject mysqlpjt 进入项目目录后 scrapy genspider -t crawl bangbing sina.com.cn

项目结构

步骤2、分析新浪网站静态代码

项目结构
新浪新闻的新闻页面都为
http://news.sina.com.cn/o/2018-03-21/doc-ifysnmez6568198.shtml
由此可以写出正则表达式.*?/[0-9]{4}.[0-9]{2}.[0-9]{2}.*?shtml
所以创建crawl模板的爬虫文件,找出首页中所有符合这个条件的页面进行爬取

步骤3、编写对应的xpath公式

此次只爬取文章标题以及关键词
所以直接写出具体的xpath公式了
标题:/html/head/title/text()
关键词:/html/head/meta[@name='keywords']/@content

步骤4、写代码
1、bangbing .py
 import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from mysqlpjt.items import MysqlpjtItem class BangbingSpider(CrawlSpider): name = 'bangbing' allowed_domains = ['sina.com.cn'] start_urls = ['http://sina.com.cn/'] rules = ( Rule(LinkExtractor(allow=(r'.*?/[0-9]{4}.[0-9]{2}.[0-9]{2}.doc-.*?shtml'), allow_domains=('sina.com.cn')), callback='parse_item', follow=True), ) def parse_item(self, response): i = MysqlpjtItem()  i['title'] = response.xpath("/html/head/title/text()").extract()  i['keywd'] = response.xpath("/html/head/meta[@name='keywords']/@content").extract() return i

在上面代码中rules部分中的LinkExtractor什么意思可以看上一章18Python爬虫—CrawlSpider自动爬取新浪新闻网页标题和链接

2、items.py
# -*- coding: utf-8 -*- import scrapy  class MysqlpjtItem(scrapy.Item): # 建立name存储网页标题 title = scrapy.Field() # 建立keywd存储网页关键词 keywd = scrapy.Field()
3、pipelines.py
 import pymysql class MysqlpjtPipeline(object): def __init__(self):   self.conn = pymysql.connect(host="127.0.0.1", user="root", passwd="123456", db="spider") def process_item(self, item, spider):  title = item["title"][0]  if item["keywd"]: keywd = item["keywd"][0] else: keywd = ""  sql = "insert into mydb(title, keywd) values('" + title + "','" + keywd + "')"  self.conn.query(sql)  self.conn.commit() return item def close_spider(self, spider):  self.conn.close()
4、settings.py
# Configure item pipelines # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html # 取消注释 ITEM_PIPELINES = { 'mycwpjt.pipelines.MycwpjtPipeline': 300, }
4、run.py
 from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'bangbing'])

执行结果:
执行结果
查看数据库:
这里写图片描述

有任何疑问可以在下方回复,看到一定会回答

原文链接:https://blog.csdn.net/a877415861/article/details/79653027?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277607816782248557448%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277607816782248557448&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-24-79653027-null-null.nonecase&utm_term=%E6%96%B0%E9%97%BB

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
文明发言,共建和谐米科社区
提交
头像

昵称

取消
昵称表情图片