********************=爬蟲原理********************=
通過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:
(e)
continue
else
:
(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函式組合起來就可以實現不同型別的網路...