Python 本地HTML文件抓取Urllib和BeautifulSoup

Python 本地HTML文件抓取Urllib和BeautifulSoup,python,loops,web-scraping,beautifulsoup,urllib,Python,Loops,Web Scraping,Beautifulsoup,Urllib,我对python非常陌生,两周来一直在从头开始编写下面的代码,以获取本地文件。大概有近百个小时的时间尽可能多地学习Python、版本性、导入lxml、bs4、requests、urllib、os、glob等包 在第一部分中,我无可救药地被困在一个目录中,用BeautifulSoup加载和解析12000个具有奇怪名称的HTML文件。我想把所有这些数据放到一个csv文件中,或者只是输出,这样我就可以用剪贴板把它复制到一个文件中 import bs4 from urllib.request impor

我对python非常陌生,两周来一直在从头开始编写下面的代码,以获取本地文件。大概有近百个小时的时间尽可能多地学习Python、版本性、导入lxml、bs4、requests、urllib、os、glob等包

在第一部分中,我无可救药地被困在一个目录中,用BeautifulSoup加载和解析12000个具有奇怪名称的HTML文件。我想把所有这些数据放到一个csv文件中,或者只是输出,这样我就可以用剪贴板把它复制到一个文件中

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

#THIS LOCAL FILE WORKS PERFECTLY. I HAVE 12,000 HTML FILES IN THIS DIRECTORY TO PROCESS.  HOW?
#my_url = 'file://127.0.0.1/C:\\My Web Sites\\BioFachURLS\\www.organic-bio.com\\en\\company\\1-SUNRISE-FARMS.html'
my_url = 'http://www.organic-bio.com/en/company/23694-MARTHOMI-ALLERGY-FREE-FOODS-GMBH'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

# html parsing
page_soup = soup(page_html, "html.parser")

# grabs each field
contactname = page_soup.findAll("td", {"itemprop": "name"})
contactstreetaddress = page_soup.findAll("td", {"itemprop": "streetAddress"})
contactpostalcode = page_soup.findAll("td", {"itemprop": "postalCode"})
contactaddressregion = page_soup.findAll("td", {"itemprop": "addressRegion"})
contactaddresscountry = page_soup.findAll("td", {"itemprop": "addressCountry"})
contactfax = page_soup.findAll("td", {"itemprop": "faxNumber"})
contactemail = page_soup.findAll("td", {"itemprop": "email"})
contactphone = page_soup.findAll("td", {"itemprop": "telephone"})
contacturl = page_soup.findAll("a", {"itemprop": "url"})

#Outputs as text without tags
Company = contactname[0].text
Address = contactstreetaddress[0].text
Zip = contactpostalcode[0].text
Region = contactaddressregion[0].text
Country = contactaddresscountry[0].text
Fax = contactfax[0].text
Email = contactemail[0].text
Phone = contactphone[0].text
URL = contacturl[0].text

#Prints with comma delimiters

print(Company + ', ' + Address + ', ' + Zip + ', ' + Region + ', ' + Country + ', ' + Fax + ', ' + Email + ', ' + URL)

我以前曾经在文件夹中运行过文件束,所以我可以建议一些帮助

我们将从for循环开始,从文件夹到文件

导入操作系统
从bs4导入BeautifulSoup作为第页
phone=[]#存储所有电话的列表
path='yourpath'#这是存储所有html的文件夹名
#请注意,您可能需要放置一个完整的路径,例如C:\Users\Niche\Desktop\htmlfolder
对于os.listdir(path)中的文件名:#从您的路径读取文件
#在这里,我们试图找到完整的路径名
对于文件名中的x:#我们将A-H存储为路径
subpath=os.path.join(路径,文件名)
对于os.listdir(子路径)中的文件名:
#获取特定html文件的完整路径
fullpath=os.path.join(子路径,文件名)
#如果我们有html标记,那么请阅读它
如果fullpath.endswith('.html'):继续
#然后我们将运行beautifulsoup来提取内容
soup=page_soup(打开(完整路径),'html.parser')
#然后运行代码
#抓住每个领域
contactname=page_soup.findAll(“td”,“itemprop”:“name”})
contactstreetaddress=page_soup.findAll(“td”,“itemprop”:“streetAddress”})
contactpostalcode=page_soup.findAll(“td”,“itemprop”:“postalCode”})
contactaddressregion=page_soup.findAll(“td”,“itemprop”:“addressRegion”})
contactaddresscountry=page_soup.findAll(“td”,“itemprop”:“addressCountry”})
contactfax=page_soup.findAll(“td”,“itemprop”:“faxNumber”})
contactemail=page_soup.findAll(“td”,“itemprop”:“email”})
contactphone=page_soup.findAll(“td”,“itemprop”:“telephone”})
contacturl=page_soup.findAll(“a”,{“itemprop”:“url”})
#输出为不带标记的文本
公司=联系人姓名[0]。文本
地址=联系人地址[0]。文本
Zip=contactpostalcode[0]。文本
Region=contactaddressregion[0]。文本
Country=contactaddresscountry[0]。文本
传真=联系人传真[0]。文本
电子邮件=联系人电子邮件[0]。文本
电话=联系人电话[0]。文本
URL=contacturl[0]。文本
这里,您可能需要考虑使用字典或列表。
#例如,将电话附加到通话电话列表中
电话。附加(电话)
代码有点凌乱,但它遍历了所有可能的文件夹(即使主文件夹中有其他文件夹),然后尝试查找html标记,然后打开它

我建议使用公司字典作为密钥,我认为公司的名称是不同的。一组列表也很好,因为您的值将被相应地排序。我不擅长使用字典,所以我不能给你更多的建议。我希望我能回答你的问题

对不起,代码太乱了


编辑:修复用html.parser替换lxml的问题

欢迎使用堆栈溢出!您可以学习并创建一个示例。这使我们更容易帮助你。非常感谢。我现在来看看你发送的代码。这个问题让我很沮丧,但我很固执,不想寻求帮助。你是个圣人。非常感谢你!