Python爬蟲(chóng)爬取信息

Python爬蟲(chóng)爬取指定信息

和我的上一篇文章相同,記錄自己學(xué)習(xí)過(guò)程以及經(jīng)驗(yàn)感受分享哪自。

上一篇文章內(nèi)容是爬取指定圖片丰包,那么這一片文章就是爬取自己想要的文字部分信息。這個(gè)有什么用呢壤巷?在之后可以將爬取好的信息(數(shù)據(jù)量龐大的)進(jìn)行清洗整理后邑彪,在Hadoop上進(jìn)行數(shù)據(jù)分析,最后再可視化胧华。

接下來(lái)也是分享幾個(gè)網(wǎng)站寄症,用實(shí)際應(yīng)用來(lái)說(shuō)明解決問(wèn)題宙彪。

網(wǎng)站1: 京東女鞋

需要用到的庫(kù)和上一篇文章差不多還是requests和BeautifulSoup。

前五個(gè)步驟和我上一篇文章是一樣的有巧,因此可以參考一下我的上一篇文章Python爬蟲(chóng)爬取圖片释漆。所以這里就不過(guò)多的去解釋了。

直接上前幾個(gè)步驟的代碼:

import requests

from bs4 import BeautifulSoup

heads = {

? ? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

}

def downJDLadyShoe():

? ? for i in range(1, 200):

? ? ? ? strUrl = "https://list.jd.com/list.html?cat=11729%2C11731%2C9772&pag=" + str(i) + "&s=121&click=0"

? ? ? ? print(strUrl)

? ? ? ? downWebContent(strUrl)

def downWebContent(url):

? ? ? ? ? ? r = requests.get(url, headers=heads)

? ? ? ? ? ? print(r.status_code)

? ? ? ? ? ? parserWebContent(r.text)

def parserWebContent(content):

? ? bs = BeautifulSoup(content, "html.parser")

? ? tags = bs.find_all("li", class_="gl-item")

? ? for tag in tags:

? ? ? ? #print(tag)

? ? ? ? parseProductTag(tag)

接下來(lái)就是找到對(duì)應(yīng)的商品信息將其爬取出來(lái)篮迎。

這里我們用到了contents,意思就是該標(biāo)簽下的全部?jī)?nèi)容男图,然后借助index來(lái)輔助我們?nèi)ゲ檎椅覀兿胍膬?nèi)容。contents[參數(shù)]甜橱,參數(shù)的位置就是我們想要的爬取的對(duì)應(yīng)的信息逊笆。在之后的replace("\n", “”)是因?yàn)檫@些信息有很多都是存在自動(dòng)換行的,直接爬取下來(lái)會(huì)導(dǎo)致寫(xiě)入時(shí)查看不方便等岂傲。因此就將換行給代替掉难裆。我們這里找了四個(gè)指標(biāo):name1是店名,name2是商品名字以及商品價(jià)格和商品圖片譬胎。這里還用到了getText()函數(shù)差牛,意思就是將該標(biāo)簽里的字符串提取出來(lái)。圖片的網(wǎng)頁(yè)鏈接缺失了頭部堰乔,因此手動(dòng)給它加上去偏化。

最后我們?cè)賹⑦@些全部拼接起來(lái),寫(xiě)入到txt里就完成了镐侯。這里是寫(xiě)到同級(jí)目錄的侦讨,若是想寫(xiě)到其它位置,將其改一下就好了苟翻。不用提前去創(chuàng)建好txt韵卤,PyCharm看你沒(méi)有的話,它會(huì)自動(dòng)給你創(chuàng)建的崇猫。

def parseProductTag(productTag):

? ? index = 0

? ? for subTag in productTag.div.contents:

? ? ? ? index = index + 1

? ? ? ? name1 = productTag.div.contents[13].getText().replace("\n", "")

? ? ? ? name2 = productTag.div.contents[7].a.em.getText().replace("\n", "")

? ? ? ? price = productTag.div.contents[5].getText().replace("\n", "")

? ? ? ? img = "https:" + productTag.div.contents[1].a.img["data-lazy-img"].replace("\n", "")

? ? f = open("京東女鞋商品信息.txt", mode="a+", encoding="utf-8")

? ? f.write(name1 + ";" + name2 + ";" + price + ";" + img + "\n")

? ? f.close()

完整的代碼是這樣的:

import requests

from bs4 import BeautifulSoup

heads = {

? ? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

}

def downJDLadyShoe():

? ? for i in range(1, 200):

? ? ? ? strUrl = "https://list.jd.com/list.html?cat=11729%2C11731%2C9772&pag=" + str(i) + "&s=121&click=0"

? ? ? ? print(strUrl)

? ? ? ? downWebContent(strUrl)

def downWebContent(url):

? ? r = requests.get(url, headers=heads)

? ? print(r.status_code)

? ? parserWebContent(r.text)

def parserWebContent(content):

? ? bs = BeautifulSoup(content, "html.parser")

? ? tags = bs.find_all("li", class_="gl-item")

? ? for tag in tags:

? ? ? ? print(tag)

? ? ? ? parseProductTag(tag)

def parseProductTag(productTag):

? ? index = 0

? ? for subTag in productTag.div.contents:

? ? ? ? index = index + 1

? ? ? ? name1 = productTag.div.contents[13].getText().replace("\n", "")

? ? ? ? name2 = productTag.div.contents[7].a.em.getText().replace("\n", "")

? ? ? ? price = productTag.div.contents[5].getText().replace("\n", "")

? ? ? ? img = "https:" + productTag.div.contents[1].a.img["data-lazy-img"].replace("\n", "")

? ? f = open("京東女鞋商品信息.txt", mode="a+", encoding="utf-8")

? ? f.write(name1 + ";" + name2 + ";" + price + ";" + img + "\n")

? ? f.close()

if __name__ == "__main__":

? ? downJDLadyShoe()

最后爬取結(jié)果是這樣的:

網(wǎng)站2:拉鉤網(wǎng)

內(nèi)容操作流程都是一樣的沈条,但是不一樣的就是,這個(gè)網(wǎng)站我們需要的信息都在contents[1]里面可以找到诅炉,這樣就省了我們好多事了蜡歹。

于是我們的代碼就很快可以完成啦!

完整的代碼是這樣的:

import requests

from bs4 import BeautifulSoup

heads = {

? ? "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

}

def parseProductTag(productTag):

? ? index = 0

? ? for subTag in productTag.div.contents:

? ? ? ? #print(index)

? ? ? ? #print(subTag)

? ? ? ? index = index + 1

? ? information = productTag.div.contents[1].getText().replace("\n", "")#.split(" ")[0]

? ? #information1 = information[-7:]

? ? #print(information)

? ? f = open("招聘信息.txt", mode="a+", encoding="utf-8")

? ? f.write(information + "\n")

? ? f.close()

? ? print("完成")

def parseWebContent(content):

? ? soup = BeautifulSoup(content, "html.parser")

? ? tags = soup.find_all("li", class_="con_list_item default_list")

? ? for tag in tags:

? ? ? ? #print(len(tag))

? ? ? ? parseProductTag(tag)

def downWebContent(url):

? ? r = requests.get(url, headers=heads)

? ? print(r.status_code)

? ? r.encoding = r.apparent_encoding

? ? #print(r.text)

? ? parseWebContent(r.text)

def downzhaopin():

? ? for i in range(1,5):

? ? ? ? if i == 1:

? ? ? ? ? ? strUrl = "http://72.itmc.org.cn/JS001/open/show/zhaopin/index.html"

? ? ? ? if i != 1:

? ? ? ? ? ? strUrl="http://72.itmc.org.cn/JS001/open/show/zhaopin/index_" + str(i) + ".html"

? ? ? ? #print(strUrl)

? ? ? ? downWebContent(strUrl)

if __name__ == "__main__":

? ? downzhaopin()

如果想跟上一個(gè)網(wǎng)站一樣挨個(gè)找然后再拼接起來(lái)的話當(dāng)然也是可以的涕烧,這里用了string和getText()月而。這二者的區(qū)別在于當(dāng)該標(biāo)簽里還嵌有其它標(biāo)簽的時(shí)候就只能用getText(),而用string則會(huì)報(bào)錯(cuò)议纯。當(dāng)該標(biāo)簽里沒(méi)有其它標(biāo)簽時(shí)既可以用getText()也可以用string父款,因此我個(gè)人覺(jué)得getText()比string要好些。

那么代碼應(yīng)該就是這樣的:

tags1 = soup.find_all("h3", style="max-width:180px")

a = str(tag1.string)

? ? tags2 = soup.find_all("span", class_="add")

b = str(tag2.getText())

tags3 = soup.find_all("span", class_="money")

c = str(tag3.string)

? ? f = open("招聘信息.txt", mode="a+", encoding="utf-8")

? ? f.write(a + ";" + b + ";" + c + "\n")

? ? f.close()

? ? print("完成")

最后爬取的結(jié)果是這樣的:

網(wǎng)站3: 當(dāng)當(dāng)網(wǎng)

這個(gè)網(wǎng)站基本流程也是和第一個(gè)也是差不多的,區(qū)別就是在最后一個(gè)函數(shù)加了一個(gè)if判斷語(yǔ)句而已憨攒。前面的都理解到了的話世杀,那么這個(gè)自然也是不在話下了,嘿嘿肝集。

直接上完整的代碼吧:

import requests

from bs4 import BeautifulSoup

head = {

? ? "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"

}

def downDangdangbook():

? ? for i in range(1, 101):

? ? ? ? strurl = "http://category.dangdang.com/pg" + str(i) + "-cp01.49.01.00.00.00.html"

? ? ? ? print(strurl)

? ? ? ? downWebContent(strurl)

def downWebContent(url):

? ? r = requests.get(url, headers=head)

? ? print(r.status_code)

? ? r.encoding=r.apparent_encoding

? ? parseWebcontent(r.text)

def parseWebcontent(content):

? ? bs = BeautifulSoup(content, "html.parser")

? ? ulTag = bs.find("ul", class_="bigimg")

? ? print(ulTag)

? ? index = 0

? ? for liTag in ulTag.contents:

? ? ? ? index = index + 1

? ? ? ? if index % 2 == 1:

? ? ? ? ? ? continue

? ? ? ? ? ? print(index)

? ? ? ? parserProductTag(liTag)

def parserProductTag(productTag):

? ? imgurl = productTag.a.img["src"]

? ? if not imgurl.startswith("http"):

? ? ? ? imgurl = productTag.a.img["data-original"]

? ? name = productTag.contents[2].getText()

? ? price = productTag.contents[4].contents[3].getText()

? ? f = open("教輔書(shū)籍信息.txt", mode="a+", encoding="utf-8")

? ? f.write(name + ";" + price + ";" + imgurl + "\n")

? ? f.close()

if __name__ == "__main__":

? ? downDangdangbook()

最后的爬取結(jié)果是這樣的:

很明顯玫坛,爬取自己想要的信息所用到的方法肯定不止我文中的這些。所以希望可以多多交流包晰。嘿嘿!

文中有解釋不到位或者錯(cuò)誤的地方炕吸,歡迎各位大佬們的指正哦伐憾。

這次的分享就到此為止了,之后我還會(huì)繼續(xù)分享自己的學(xué)習(xí)經(jīng)歷赫模,讓自己不斷成長(zhǎng)树肃!

沖呀?jīng)_呀?jīng)_呀!F俾蕖胸嘴!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斩祭,隨后出現(xiàn)的幾起案子劣像,更是在濱河造成了極大的恐慌,老刑警劉巖摧玫,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耳奕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诬像,警方通過(guò)查閱死者的電腦和手機(jī)屋群,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坏挠,“玉大人芍躏,你說(shuō)我怎么就攤上這事〗岛荩” “怎么了对竣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)喊熟。 經(jīng)常有香客問(wèn)我柏肪,道長(zhǎng),這世上最難降的妖魔是什么芥牌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任烦味,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谬俄。我一直安慰自己柏靶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布溃论。 她就那樣靜靜地躺著屎蜓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钥勋。 梳的紋絲不亂的頭發(fā)上炬转,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音算灸,去河邊找鬼扼劈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛菲驴,可吹牛的內(nèi)容都是我干的荐吵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赊瞬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼先煎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起巧涧,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤薯蝎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谤绳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體良风,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年闷供,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烟央。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歪脏,死狀恐怖疑俭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婿失,我是刑警寧澤钞艇,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站豪硅,受9級(jí)特大地震影響哩照,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懒浮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一飘弧、第九天 我趴在偏房一處隱蔽的房頂上張望识藤。 院中可真熱鬧,春花似錦次伶、人聲如沸痴昧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赶撰。三九已至,卻和暖如春柱彻,著一層夾襖步出監(jiān)牢的瞬間豪娜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工哟楷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侵歇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓吓蘑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坟冲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磨镶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容