爬虫综合大作业
可以用pandas读出之前保存的数据:
newsdf = pd.read_csv(r'F:\duym\gzccnews.csv')
一.把爬取的内容保存到数据库sqlite3
import sqlite3
with sqlite3.connect('gzccnewsdb.sqlite') as db:
newsdf.to_sql('gzccnews',con = db)
with sqlite3.connect('gzccnewsdb.sqlite') as db:
df2 = pd.read_sql_query('SELECT * FROM gzccnews',con=db)
保存到MySQL数据库
- import pandas as pd
- import pymysql
- from sqlalchemy import create_engine
- conInfo = "mysql+pymysql://user:passwd@host:port/gzccnews?charset=utf8"
- engine = create_engine(conInfo,encoding='utf-8')
- df = pd.DataFrame(allnews)
- df.to_sql(name = ‘news', con = engine, if_exists = 'append', index = False)
二.爬虫综合大作业
- 选择一个热点或者你感兴趣的主题。
- 选择爬取的对象与范围。
- 了解爬取对象的限制与约束。
- 爬取相应内容。
- 做数据分析与文本分析。
- 形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。
- 文章公开发布。
参考:
爬了一下天猫上的Bra购买记录,有了一些羞羞哒的发现...
Python做了六百万字的歌词分析,告诉你中国Rapper都在唱些啥
分析了42万字歌词后,终于搞清楚民谣歌手唱什么了
十二星座的真实面目
唐朝诗人之间的关系到底是什么样的?
中国姓氏排行榜
三.爬虫注意事项
1.设置合理的爬取间隔,不会给对方运维人员造成压力,也可以防止程序被迫中止。
- import time
- import random
- time.sleep(random.random()*3)
2.设置合理的user-agent,模拟成真实的浏览器去提取内容。
- 首先打开你的浏览器输入:about:version。
- 用户代理:
- 收集一些比较常用的浏览器的user-agent放到列表里面。
- 然后import random,使用随机获取一个user-agent
- 定义请求头字典headers={’User-Agen‘:}
- 发送request.get时,带上自定义了User-Agen的headers
3.需要登录
发送request.get时,带上自定义了Cookie的headers
headers={’User-Agen‘:
'Cookie': }
4.使用代理IP
通过更换IP来达到不断高 效爬取数据的目的。
headers = {
"User-Agent": "",
}
proxies = {
"http": " ",
"https": " ",
}
response = requests.get(url, headers=headers, proxies=proxies)
四、第11周课堂检查
正文:
这次爬去的对象是豆瓣中电影《何以家为》的前十页评论,并用词云显示。《何以家为》是法国的一部剧情片,获得当年的奥斯卡金像奖,是一部难得的佳作。
目录:
爬取评论:news.py ; 生成词语:abc.py ;词云背景图:jia.jpg ;生成的词云图片: result.jpg
1.获取url
这些短评的url为:
https://movie.douban.com/subject/30170448/comments?start=40&limit=20&sort=new_score&status=P
https://movie.douban.com/subject/30170448/comments?start=60&limit=20&sort=new_score&status=P
https://movie.douban.com/subject/30170448/comments?start=80&limit=20&sort=new_score&status=P
可以发现每一页评论的url只是变化了start= 后面的数字,可以遍历这些url。
2.爬取评论
爬去前十页评论,生成文本文件,并保存在文本文件中。
代码:
import urllib.request from bs4 import BeautifulSoup def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'} req = urllib.request.Request(url,headers=headers) req = urllib.request.urlopen(req) content = req.read().decode('utf-8') return content def getComment(url): """解析HTML页面""" html = getHtml(url) soupComment = BeautifulSoup(html, 'html.parser') comments = soupComment.findAll('span', 'short') onePageComments = [] for comment in comments: # print(comment.getText()+'\n') onePageComments.append(comment.getText()+'\n') return onePageComments if __name__ == '__main__': f = open('何以家为page10.txt', 'w', encoding='utf-8') for page in range(10): # 豆瓣爬取多页评论需要验证。 url = 'https://movie.douban.com/subject/30170448/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P' print('第%s页的评论:' % (page+1)) print(url + '\n') for i in getComment(url): f.write(i) print(i) print('\n')
3.生成词云图
mport matplotlib.pyplot as plt from wordcloud import WordCloud from scipy.misc import imread import jieba text = open("何以家为page10.txt","rb").read() #结巴分词 wordlist = jieba.cut(text,cut_all=True) wl = " ".join(wordlist) #print(wl)#输出分词之后的txt #把分词后的txt写入文本文件 #fenciTxt = open("fenciHou.txt","w+") #fenciTxt.writelines(wl) #fenciTxt.close() #设置词云 wc = WordCloud(background_color = "white", #设置背景颜色 mask = imread('jia.jpg'), #设置背景图片 max_words = 2000, #设置最大显示的字数 stopwords = ["的", "这种", "这样", "还是", "就是", "这个"], #设置停用词 font_path = "C:\Windows\Fonts\simkai.ttf", # 设置为楷体 常规 #设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文) max_font_size = 60, #设置字体最大值 random_state = 30, #设置有多少种随机生成状态,即有多少种配色方案 ) myword = wc.generate(wl)#生成词云 wc.to_file('result.jpg')