hs248613 发表于 2022-3-23 14:08

Python爬取特定网页效果求助

本帖最后由 hs248613 于 2022-4-9 18:56 编辑

Python爬取特定网页效果求助
想实现效果:爬取的数据分文件名称和链接两列N行,一行一行写入EXCEL表格。
代码参考:豆瓣Top250爬取
目前问题:在原代码上修修改改没有报错了,但因为网站不一样,爬取的数据涉及到了列表嵌套,把小白搞懵了,希望大佬指点下。
#爬取代码
from bs4 import BeautifulSoup       #网页解析,获取数据
import re                           #正则表达式,进行文字匹配
import urllib.request,urllib.error   #制定URL,获取网页数据
import xlwt                            #进行excel操作
import sqlite3                         #进行SQlite 数据库操作


def main():
    baseurl = "https://tujixiazai.com/category/biaozhuntuji/page/"
    #1.爬取网页
    datalist = getData(baseurl)
    savepath = ".\\工程图集.xls"
    #3.保存数据
    saveData(datalist,savepath)

findLink = re.compile(r'<a href="(.*)" rel=')
findTitle = re.compile(r'<a href=".*title="(.*?)">')

#爬取网页
def getData(baseurl):
    datalist = []
    for i in range(0,1):          #调用获取页面信息函数,10次
      url = baseurl + str(i)
      html = askURL(url)       #保存获取到的网页源码

      # 2.逐一解析网页
      soup = BeautifulSoup(html,"html.parser")
      for con in soup.find_all('div',class_="con"):
            # print(con)
            data = []# 保存一部电影的所有信息
            con = str(con)

            link = re.findall(findLink,con)# re库用来通过正则表达式查找指定的字符串
            data.append(link)

            titles = re.findall(findTitle,con)
            data.append(titles)

            datalist.append(data)

    return datalist

#得到指定的一个URL的网页内容
def askURL(url):
    head = {                  #模拟浏览器头部信息,向服务器发送消息
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.46"
    }
                        #用户代{过}{滤}理,表示告诉服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器我们可以接收什么水平的文件内容。

    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
      response = urllib.request.urlopen(request)
      html = response.read().decode("utf-8")
      # print(html)
    except urllib.error.URLError as e:
      if hasattr(e,"code"):
            print(e.code)
      if hasattr(e,"reason"):
            print(e.reason)

    return html


#保存数据
def saveData(datalist,savepath):
    print("save.....")
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)# 创建workbook对象
    sheet = book.add_sheet('工程图集',cell_overwrite_ok=True)# 创建工作表
    col = ("详情连接","图集名称")
    for i in range(0,2):
      sheet.write(0,i,col)#写列名
    for i in range(0,2):
      print("第%d"%(i+1))   #print(f'第{i}条')
      data = datalist
      for j in range(0,2):
            sheet.write(i+1,j,data)

    book.save(savepath)#保存

if __name__ == "__main__":         #当程序执行时
    #调用程序
    main()
    print("爬取完毕!")

旧年白白白 发表于 2022-3-23 15:52

本帖最后由 旧年白白白 于 2022-3-23 15:54 编辑

用beautifulsoup里面的遍历代替re

hs248613 发表于 2022-3-24 08:54

limuyan44 发表于 2022-3-23 15:52
import re
import xlwt
import requests


谢谢大佬,代码可以用。大佬代码在爬取的数据的时候就分成列表和字典里一一对应的键值对,比我参考修改的清晰明了多了,我参考修改出来的代码爬取出来的都是嵌套的列表层级太混乱了。小白学的例子少了跳不出思维限制,自己生搬硬套的弄的很混乱。

hs248613 发表于 2022-3-24 08:55

旧年白白白 发表于 2022-3-23 15:52
用beautifulsoup里面的遍历代替re

谢谢大佬提点,我研究下beautifulsoup里面的遍历

hs248613 发表于 2022-3-24 17:43

limuyan44 发表于 2022-3-24 11:24
不过,一般的网页你拿我这代码改改规则就行了xpath和正则都一样一句话。

好的,谢谢大佬耐心指点,我去了解下xpath
页: [1]
查看完整版本: Python爬取特定网页效果求助