爬取學校新聞網站文章
阿新 • • 發佈:2021-01-05
技術標籤:python
爬取學校新聞網站文章
爬取思路
第一步,用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 請求