爬取学校新闻网站文章
发布时间
阅读量:
阅读量
该文本描述了从学校新闻网站爬取文章的完整流程,包括获取新闻目录、提取文章URL及标题、根据日期限制范围、从每篇文章获取其他信息(如作者、正文、浏览数)以及存入数据库。文本中提到在Chrome检查功能中发现新闻浏览数显示但无法爬取,最终发现是Ajax请求问题,并使用pandas库处理。摘要需简洁概括核心内容。
爬取学校新闻网站文章
- 爬取思路
- 遇到的问题
爬取思路
第一步,用requests获取新闻目录的网页源码。
def get_page(url): #页面源代码
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
else:
print("Fail to get page")
url = "http://news.fzu.edu.cn/html/fdyw/" + str(offset) + ".html"
html = get_page(url)
第二步,获取每一篇文章的url,并先提取日期、标题
def get_articles(html, new_list):
doc = pq(html)
articles = doc('.list_main_content li')
get_articles(html, new_list)
第三步,通过日期限制爬取范围,并对每一则新闻的url发起get请求
if new["date"][:4] == "2020": #只爬2020年
new["title"] = article('a').text() #标题
url = 'http://news.fzu.edu.cn' + article('a').attr('href')
html_new = get_page(url)
get_other_data(html_new, new)
new_list.append(new)
elif new["date"][:4] == "2021":
continue
else:
global flag
flag = 1
return
第四步,在每则新闻网页的源代码中获取剩下的信息,即作者、正文、浏览数
def get_other_data(html, new):
doc = pq(html)
data = doc('.detail_main_content')
author = data('#author').text() #作者
new["author"] = author
page_views_str = data('script').text() #阅读数
a1 = page_views_str.find("url")
a2 = page_views_str.find("timeout")
page_views_url = page_views_str[a1 + 5:a2 - 2]
page_views_url = "http://news.fzu.edu.cn" + page_views_url
page_views = requests.post(page_views_url).text
new["page_views"] = page_views
content = "" #正文
paragraphs = doc('#news_content_display')
for p in paragraphs('p').items():
content += p.text() + "\n"
new["content"] = content
第五步,存入数据库
db = pymysql.connect(host='localhost', user='root', password='beli3579', port=3306, db='fzu_new')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS news")
sql = '''create table news(
date varchar(20),
title varchar(70),
author varchar(50),
page_views varchar(20),
content varchar(3000)
)'''
cursor.execute(sql)
for new in new_list:
sql = 'insert into news(date,title,author,page_views,content) values(%s,%s,%s,%s,%s)'
try:
if cursor.execute(sql, tuple(new.values())):
print('Success to the database')
db.commit()
except:
print('Fail to the database')
db.rollback()
db.close()
遇到的问题

在使用Chrome的检查功能时,能够显示新闻的浏览数据,但无法获取完整的新闻内容。经过分析,问题源于该新闻内容采用了Ajax请求方式。

全部评论 (0)
还没有任何评论哟~
