Python 網路爬蟲(新聞採集指令碼)

2022-03-16 19:57:58 字數 4846 閱讀 1504

********************=爬蟲原理********************=

通過python訪問新聞首頁,獲取首頁所有新聞鏈結,並存放至url集合中。

逐一取出集合中的url,並訪問鏈結獲取原始碼,解析出新的url鏈結新增到集合中。

為防止重複訪問,設定乙個歷史訪問,用於對新新增的url進行過濾。

解析dom樹,獲取文章相關資訊,並將資訊儲存到article物件中。

將article物件中的資料通過pymysql儲存到資料庫中。

每完成一次資料的儲存,計數器增加並列印文章標題,否則列印錯誤資訊。

如果集合中的url全部讀取完或資料數量達到設定值,程式結束。

********************=儲存結構********************=

create

table

`news` (

`id`

int(6) unsigned not

null

auto_increment,

`url`

varchar(255) not

null

, `title`

varchar(45) not

null

, `author`

varchar(12) not

null

, `date`

varchar(12) not

null

, `about`

varchar(255) not

null

, `content`

text

notnull,

primary

key(`id`),

unique

key`url_unique` (`url`)

) engine

=innodb default charset=utf8;

********************=指令碼**********************=

'''

'''import re #

網路連線模組

import bs4 #

dom解析模組

import pymysql #

資料庫連線模組

import urllib.request #

網路訪問模組

#配置引數

maxcount = 1000 #

資料數量

home = '

'#起始位置

#資料庫連線引數

db_config =

url_set = set() #

url集合

url_old = set() #

過期url

#獲取首頁鏈結

#文章類定義

class

article(object):

def__init__

(self):

self.url =none

self.title =none

self.author =none

self.date =none

self.about =none

self.content =none

#連線資料庫

connect =pymysql.connect(

host=db_config['

host'],

port=int(db_config['

port

']),

user=db_config['

username'],

passwd=db_config['

password'],

db=db_config['

database'],

charset=db_config['

charset']

)cursor =connect.cursor()

#處理url資訊

count =0

while len(url_set) !=0:

try:

#獲取鏈結

url =url_set.pop()

url_old.add(url)

#獲取**

html = urllib.request.urlopen(url).read().decode('

utf8')

#dom解析

鏈結匹配規則

links = soup.find_all('

a', href=re.compile(pattern))

#獲取url

for link in

links:

if link['

href

'] not

inurl_old:

url_set.add(link[

'href'])

#資料防重

sql = "

select id from news where url = '%s'

"data =(url,)

cursor.execute(sql %data)

if cursor.rowcount !=0:

raise exception('

data repeat exception:

' +url)

#獲取資訊

article =article()

article.url = url #

url資訊

page = soup.find('

div', )

article.title = page.find('

h1').get_text() #

標題資訊

info = page.find('

div', )

article.author = info.find('

a', ).get_text() #

作者資訊

article.date = info.find('

span

', ).get_text() #

日期資訊

article.about = page.find('

blockquote

').get_text()

pnode = page.find('

div', ).find_all('p'

) article.content = ''

for node in pnode: #

獲取文章段落

article.content += node.get_text() + '\n'

#追加段落資訊

#儲存資料

sql = "

insert into news( url, title, author, date, about, content )

"sql = sql + "

values ('%s', '%s', '%s', '%s', '%s', '%s')

"data =(article.url, article.title, article.author, article.date, article.about, article.content)

cursor.execute(sql %data)

connect.commit()

except

exception as e:

print

(e)

continue

else

:

print

(article.title)

count += 1

finally

:

#判斷資料是否收集完成

if count ==maxcount:

break

#關閉資料庫連線

cursor.close()

connect.close()

********************=執行結果********************=

設定引數 maxcount = 10 , home = ''

查詢資料 select title, author from python.news;

python 爬蟲 網路資料採集 入門知識

1 正規表示式符號與方法 常用符號 匹配任意字元,換行符 除外 匹配前乙個字元0次或無限次 匹配前乙個字元0次或1次 貪心演算法 非貪心演算法 括號內的資料作為結果返回 2 正規表示式符號與方法 常用方法 findall 匹配所有符合規律的內容,返回包含結果的列表 search 匹配並提取第乙個符合...

Python多篇新聞自動採集

昨天用python寫了乙個天氣預報採集,今天趁著興頭寫個新聞採集的。接下來分解目標,一步一步地做。我們都知道html鏈結的標籤是 a 鏈結的屬性是 href 也就是要獲得html中所有tag a,attrs href 值。查閱了資料,一開始我打算用htmlparser,而且也寫出來了。但是它有乙個問...

python網路爬蟲 通過網際網路採集

在你寫爬蟲隨意跟隨外鏈跳轉之前,請問自己幾個問題 1 我們要收集哪些資料?這些資料可以通過採集幾個已經確定的 永遠是最簡單的做法 完成嗎?或者我的爬蟲需要發現那些我可能不知道的 3 如果我的網路爬蟲引起了某個 網管的懷疑,我如何避免法律責任?幾個靈活的python函式組合起來就可以實現不同型別的網路...