Python веб-соскабливание и превосходство населения - PullRequest
0 голосов
/ 16 января 2019

Я относительно новичок в программировании и совершенно новый в переполнении стека. Я думал, что хороший способ учиться будет с проектом на основе Python & Excel, но я застрял. Мой план состоял в том, чтобы очистить веб-сайт от адресов с помощью красивого супа, найти оценки стоимости этих адресов и заполнить их в табличной форме в Excel. Я не могу понять, как получить адреса (HTML-код на сайте, который я пытаюсь почистить, кажется довольно грязным), но мне удалось получить ссылки адресов Google с сайта. Извините, если это очень простой вопрос, любой совет может помочь:

from bs4 import BeautifulSoup

from urllib.request import Request, 
urlopen

import re

import pandas as pd

req = Request("http://www.tjsc.com/Sales/TodaySales")
html_page = urlopen(req)

soup = BeautifulSoup(html_page, "lxml")

count = 0
links = []
for link in soup.findAll('a'):
    links.append(link.get('href'))
    count = count +1

print(links)
print("count is", count)

po = links

pd.DataFrame (po) .to_excel ('todaysale.xlsx', header = False, index = False)

1 Ответ

0 голосов
/ 16 января 2019

вы на правильном пути. Вместо «a» вам нужно использовать другой html-тег «td» для строк. Также 'th' для имен столбцов. Вот один из способов его реализации. Функция list_slide преобразует каждые 14 элементов в одну строку, поскольку исходная таблица имеет 14 столбцов.

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

url = "http://www.tjsc.com/Sales/TodaySales"
r = requests.get(url, verify=False)
text = r.text
soup = bs(text, 'lxml')

# Get column headers from the html file
header = []
for c_name in  soup.findAll('th'):
    header.append(c_name)
# clean up the extracted header content
header = [h.contents[0].strip() for h in header]

# get each row of the table
row = []
for link in soup.find_all('td'):
    row.append(link.get_text().strip())

def list_slice(my_list, step):
"""This function takes any list, and divides it to chunks of size of "step"
"""
   return [my_list[x:x + step] for x in range(0, len(my_list), step)]

# creating the final dataframe
df = pd.DataFrame(list_slice(row, 14), columns=header[:14])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...