0
点赞
收藏
分享

微信扫一扫

爬虫从入门到入预(7)

正义的杰克船长 2022-03-11 阅读 52
爬虫

今天的任务是爬一下中国水果交易网的信息。由于老师的课程是2021年年初的,它使用的是北京新发地菜市场的菜价,但是现在已经改版了,具体的网页形式我不认识,它的菜价信息是循环滚动的。所以为了跟上老师的知识步伐,我们改用了中国水果交易网的水果价格。

今天所需要学的是BS4,从BS4内导入beautifulsoup进行爬取。接下来是代码:

#beautifulsoup4解析
#HTML超文本标记语言
import requests
from bs4 import BeautifulSoup
import csv
f=open("fruit_price.csv",mode="w")
csvwriter=csv.writer(f)
headers={
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}

csv格式的写入形式还是不熟悉,后面加强练习。后面我自己带了一点小小的创新,因为水果信息肯定是一页放不下的,所以我使用for循环获取每一页的信息,然后不断写进csv文件中。

for c in range(0,2487):
    url="https://www.guo68.com/market?page="+"c"
    resp=requests.get(url,headers=headers)
    resp.close()
    #print(resp.text)

后面的代码大体都有注释,可以直接看注释就行了!

#beautifulsoup4解析
#HTML超文本标记语言
import requests
from bs4 import BeautifulSoup
import csv

f=open("fruit_price.csv",mode="w")
csvwriter=csv.writer(f)
headers={
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}
for c in range(0,2487):
    url="https://www.guo68.com/market?page="+"c"
    resp=requests.get(url,headers=headers)
    resp.close()
    #print(resp.text)

    #解析数据
    #把页面源代码交给beautifulsoap处理,生成bs对象
    page=BeautifulSoup(resp.text,"html.parser")#指定html解析器,否则处理缓慢且报警告
    #从bs对象中查找数据find(标签,属性),find_all(标签,属性)
    #print(page)

    table = page.find("div",class_="market-table clearFlo")#从page中定位到我们想要的表格
    #print(table)
    tr=table.find_all("ul")[1:]#在table 里面找到所有的ul,并且我们需要跳过第一行的标签行,所以从[1:]开始
    #print(tr)
    for ul in tr:
        li=ul.find_all("li")
        name=li[0].text
        place=li[1].text
        price=li[2].text
        date=li[3].text
        #tendmap=li[4].text.text
        #print(name,place,price,date)
        csvwriter.writerow([name,place,price,date])

f.close()
print("over!")

最后整体的代码贴出来了。 

#解析数据
    #把页面源代码交给beautifulsoap处理,生成bs对象
    page=BeautifulSoup(resp.text,"html.parser")#指定html解析器,否则处理缓慢且报警告
    #从bs对象中查找数据find(标签,属性),find_all(标签,属性)
    #print(page)

    table = page.find("div",class_="market-table clearFlo")#从page中定位到我们想要的表格
    #print(table)
    tr=table.find_all("ul")[1:]#在table 里面找到所有的ul,并且我们需要跳过第一行的标签行,所以从[1:]开始
    #print(tr)
    for ul in tr:
        li=ul.find_all("li")
        name=li[0].text
        place=li[1].text
        price=li[2].text
        date=li[3].text
        #tendmap=li[4].text.text
        #print(name,place,price,date)
        csvwriter.writerow([name,place,price,date])

f.close()
print("over!")
举报

相关推荐

0 条评论